maven打包普通spring项目 |
您所在的位置:网站首页 › maven war包项目转springboot › maven打包普通spring项目 |
目录
前言第一次尝试第二次尝试第三次尝试第四次尝试maven-jar-plugin也可以正常打包Spring普通项目总结
前言
本文主要介绍我本人在使用maven打包一个普通spring项目使用网上各种教程都没有成功,最后多次尝试分析后成功的过程。 因为平时开发都是开发SSM、SpringBoot这一类web应用,或者为公司开发一些公共组件(导出成jar引入主项目)这样,开发控制台程序也都是使用使用基础的开发模式,建立普通的java项目然后手工导入依赖jar包,最后使用开发工具导出可执行jar包,没有接触过使用maven开发控制台程序导出jar包运行。 第一次尝试根据自己掌握的知识点,肯定是使用maven-jar-plugin插件进行打包操作 org.apache.maven.plugins maven-jar-plugin 1.8 1.8 org.test.App执行maven package命令,没报错,去到target目录一看,输出的jar包只有十几K?这明显有问题呀,但是还是使用java -jar执行了一下报错: 关于maven如何打包一个普通的spring项目(输出一个执行main方法的jar包),网上很多资料是说使用maven-assembly-plugin这个插件进行打包。 第一次尝试打包使用以下配置: maven-assembly-plugin false jar-with-dependencies org.test.App make-assembly package assembly可以正常打包,但是在执行的时候出现以下错误:
于是找到新的方向:怎么使用maven-assembly-plugin插件打包出来的jar包中依赖包不被解压? 查找资料后,发现之前复制网上的pom build配置,是因为使用了maven-assembly-plugin中一个自带的配置文件,而这个配置文件中配置了打包是将所有依赖包解压! org.apache.maven.plugins maven-assembly-plugin org.test.App src/main/resource/assembly/assembly.xml make-assembly package singlejar-with-dependencies执行的默认配置文件内容: jar-with-dependencies jar false true runtime ${project.build.outputDirectory}自定义配置文件assembly.xml: with-dependence jar false false runtime ${project.build.outputDirectory} /执行 maven clean package 命令进行打包,正常执行,输出的jar包也有十几兆了,我以为已经可以了!执行后还是报错: 脑洞了一下,使用SpringBoot的spring-boot-maven-plugin生成可执行jar包会怎么样: org.springframework.boot spring-boot-maven-plugin com.zc.largecash.cb.removeredis.App repackage导出的可执行jar包,可以正常运行!!! 查看了SpringBoot的spring-boot-maven-plugin生成可执行jar包内部文件结构, 然后再对比以前自己使用myeclipse导出的控制台程序,发现使用maven导出的jar包中“META-INF”下MANIFEST.MF缺少“Class-Path”! 执行,发现还是不行,结合MyEclipse导出的控制台程序中的MANIFEST.MF文件: 第三次尝试,与第一次使用maven-jar-plugin导出的可执行jar包,执行时出现的错误是一样的,于是回过头查看maven-jar-plugin导出的可执行jar包内的MANIFEST.MF文件,发现也是缺少“Class-Path”这一项参数的 找到maven-jar-plugin与“Class-Path”相关的资料发现: org.apache.maven.plugins maven-jar-plugin 2.6 org.test.App 添加以下2项配置,可以使得导出的可执行jar中MANIFEST.MF文件带有“Class-Path”这一项 true lib/执行mevan package命令,成功,但是发现2个问题: 依赖jar包没有被导出配置文件必须包含在导出的可执行jar包内部,不然无法被扫描到以下为MANIFEST.MF文件内容: 这样一来,maven-jar-plugin配合使用maven-dependency-plugin就可以很好的导出可执行jar包 问题2. 想将配置文件放置在可执行jar包外面,很简单,只需要编辑一下MANIFEST.MF文件中“Class-Path”,添加你配置文件准备放置的位置的相对路径(或者绝对路径,绝对路径应该用的很少),如“ ./ ”则代表可执行jar包同级目录,这样就能将配置文件放在jar包可执行jar包同级目录也能被程序正常读取。 另外需要注意,“Class-Path”配置的值中,会有很多项,各项之间一定要用空格隔开,不能使用其他字符,并且需要确保每一行不能有太多字符,及时换行,每一行最前面需要有空格! 手工编辑MANIFEST.MF文件“Class-Path”值,毕竟还是太繁琐,每次打包都需要操作一遍,目前还没有找到maven-jar-plugin可以配置导出jar包时给MANIFEST.MF文件“Class-Path”值添加自定义信息!希望有大佬来解答一下这个问题 总结 maven-assembly-plugin默认配置打包会将所有依赖jar包解压,这样Spring内置的很多同名配置文件将会相互覆盖,导致输出的可执行jar包执行报:Offending resource: class path resource [*****.xml]错误maven-jar-plugin无法将依赖jar包一并导出,需要配合使用maven-dependency-plugin另外附上一片介绍MANIFEST.MF文件的博文 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |